#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
    int pipefd[2];      //创建一个int类型的数组 
    int ret = pipe(pipefd);         //将数组的地址传参,pipe将这块地址变成一个匿名管道
    if(ret < 0){
        perror("pipe error");
    }
    int pid1 = fork();
    if(pid1 < 0){
        perror("pid1 fork error~");
    }else if(pid1 == 0){
        dup2(pipefd[1], 1);         //重定向   将标准输出指向管道   ps写入管道
        execl("/usr/bin/ps", "ps", "-ef", NULL);    //程序替换
        exit(0);    //进程退出,则所有读端写端被关闭
    }
    int pid2 = fork();
    if(pid2 < 0){
        perror("pid2 fork error~");
    }else if(pid2 == 0){
        close(pipefd[1]);   //关闭pid2的写端
        dup2(pipefd[0], 0);         //重定向    将标准输入指向管道   grep从管道读取
        execl("/usr/bin/grep", "grep", "sshd", NULL);
        exit(0);
    }
    close(pipefd[0]);   //关闭父进程读端
    close(pipefd[1]);   //关闭父进程写端
    waitpid(pid1, NULL, 0);//防止僵尸进程
    waitpid(pid2, NULL, 0);

    return 0;
}
